lib: Use g_file_enumerator_iterate() if available, with fallback
authorColin Walters <walters@verbum.org>
Wed, 15 Jun 2016 01:51:10 +0000 (21:51 -0400)
committerAtomic Bot <atomic-devel@projectatomic.io>
Tue, 21 Jun 2016 18:24:17 +0000 (18:24 +0000)
Import `gs_file_enumerator_iterate()` for the next six months or
so...after RHEL 7.3 is released I'm strongly considering hard
requiring 2.46 or so.

Likely at some point we should figure out how to share more "glib
backport" code with NetworkManager at least.

Closes: #341
Approved by: jlebon

src/libostree/ostree-bootloader-grub2.c
src/libostree/ostree-gpg-verifier.c
src/libostree/ostree-repo-checkout.c
src/libostree/ostree-repo-commit.c
src/libostree/ostree-repo-libarchive.c
src/libostree/ostree-repo-static-delta-core.c
src/libostree/ostree-repo.c
src/libostree/ostree-sysroot-cleanup.c
src/libotutil/ot-gio-utils.c
src/libotutil/ot-gio-utils.h
src/ostree/ot-admin-instutil-builtin-selinux-ensure-labeled.c

index c970e6626c6ed9497cf18f57253225c2317e0a52..6aa551aea6269f463103813a802263d27ec9f77e 100644 (file)
@@ -83,8 +83,8 @@ _ostree_bootloader_grub2_query (OstreeBootloader *bootloader,
           const char *fname;
           g_autofree char *subdir_grub_cfg = NULL;
 
-          if (!gs_file_enumerator_iterate (direnum, &file_info, NULL,
-                                           cancellable, error))
+          if (!g_file_enumerator_iterate (direnum, &file_info, NULL,
+                                          cancellable, error))
             goto out;
           if (file_info == NULL)
             break;
index b9a03a1173de3645215cc55fc6c33c8790ffc8d1..0ec0b515a5fe68ca23ce2007ce244effaad20839 100644 (file)
@@ -253,8 +253,8 @@ _ostree_gpg_verifier_add_keyring_dir (OstreeGpgVerifier   *self,
       GFile *path;
       const char *name;
 
-      if (!gs_file_enumerator_iterate (enumerator, &file_info, &path,
-                                       cancellable, error))
+      if (!g_file_enumerator_iterate (enumerator, &file_info, &path,
+                                      cancellable, error))
         goto out;
       if (file_info == NULL)
         break;
index 5f7cf0bded2fe8588cbac75ba777fc9f896ffad5..59c8517ad5208215b231f4362b5166efe537dd99 100644 (file)
@@ -696,8 +696,8 @@ checkout_tree_at (OstreeRepo                        *self,
       GFile *src_child;
       const char *name;
 
-      if (!gs_file_enumerator_iterate (dir_enum, &file_info, &src_child,
-                                       cancellable, error))
+      if (!g_file_enumerator_iterate (dir_enum, &file_info, &src_child,
+                                      cancellable, error))
         goto out;
       if (file_info == NULL)
         break;
index cec19e4a788ecd8c6b432283a90ffd1b4b7a14f1..0d45dd47c5065fbcc705ef152603f015b3aafe15 100644 (file)
@@ -2659,8 +2659,8 @@ write_directory_to_mtree_internal (OstreeRepo                  *self,
         {
           GFileInfo *child_info;
           
-          if (!gs_file_enumerator_iterate (dir_enum, &child_info, NULL,
-                                           cancellable, error))
+          if (!g_file_enumerator_iterate (dir_enum, &child_info, NULL,
+                                          cancellable, error))
             goto out;
           if (child_info == NULL)
             break;
index 45427ef774bda20be24abacce9feea7c88cf9ec8..cfecd6d9dacae974921de84cdafe35a75a52553d 100644 (file)
@@ -1075,8 +1075,8 @@ write_directory_to_libarchive_recurse (OstreeRepo               *self,
       GFileInfo *file_info;
       GFile *path;
 
-      if (!gs_file_enumerator_iterate (dir_enum, &file_info, &path,
-                                       cancellable, error))
+      if (!g_file_enumerator_iterate (dir_enum, &file_info, &path,
+                                      cancellable, error))
         goto out;
       if (file_info == NULL)
         break;
index de9e6c7a94c15e12c17c170c4d7f2ffdeef40e9c..d4f8a57353b93f69ccc17bfe5271ad675cab2e3b 100644 (file)
@@ -94,8 +94,8 @@ ostree_repo_list_static_delta_names (OstreeRepo                  *self,
           GFileInfo *file_info;
           GFile *child;
 
-          if (!gs_file_enumerator_iterate (dir_enum, &file_info, &child,
-                                           NULL, error))
+          if (!g_file_enumerator_iterate (dir_enum, &file_info, &child,
+                                          NULL, error))
             goto out;
           if (file_info == NULL)
             break;
@@ -117,8 +117,8 @@ ostree_repo_list_static_delta_names (OstreeRepo                  *self,
               const char *name1;
               const char *name2;
 
-              if (!gs_file_enumerator_iterate (dir_enum2, &file_info2, &child2,
-                                               NULL, error))
+              if (!g_file_enumerator_iterate (dir_enum2, &file_info2, &child2,
+                                              NULL, error))
                 goto out;
               if (file_info2 == NULL)
                 break;
index 0b918ed82b657b3668df4c6802bd39e40ef5d98a..81fc719f6ab965b084b72793760655781c88d6ba 100644 (file)
@@ -2070,8 +2070,8 @@ append_remotes_d (OstreeRepo          *self,
           const char *name;
           guint32 type;
 
-          if (!gs_file_enumerator_iterate (direnum, &file_info, &path,
-                                           NULL, error))
+          if (!g_file_enumerator_iterate (direnum, &file_info, &path,
+                                          NULL, error))
             goto out;
           if (file_info == NULL)
             break;
index 64c1389e16d14a67553e94bd356c6c6d686836ce..862d8154054052541e4e8fc8208d1a212fc8c270 100644 (file)
@@ -65,8 +65,8 @@ _ostree_sysroot_list_deployment_dirs_for_os (GFile               *osdir,
       g_autofree char *csum = NULL;
       gint deployserial;
 
-      if (!gs_file_enumerator_iterate (dir_enum, &file_info, &child,
-                                       cancellable, error))
+      if (!g_file_enumerator_iterate (dir_enum, &file_info, &child,
+                                      cancellable, error))
         goto out;
       if (file_info == NULL)
         break;
@@ -127,8 +127,8 @@ list_all_deployment_directories (OstreeSysroot       *self,
       GFileInfo *file_info = NULL;
       GFile *child = NULL;
 
-      if (!gs_file_enumerator_iterate (dir_enum, &file_info, &child,
-                                       NULL, error))
+      if (!g_file_enumerator_iterate (dir_enum, &file_info, &child,
+                                      NULL, error))
         goto out;
       if (file_info == NULL)
         break;
@@ -215,8 +215,8 @@ list_all_boot_directories (OstreeSysroot       *self,
       GFile *child = NULL;
       const char *name;
 
-      if (!gs_file_enumerator_iterate (dir_enum, &file_info, &child,
-                                       NULL, error))
+      if (!g_file_enumerator_iterate (dir_enum, &file_info, &child,
+                                      NULL, error))
         goto out;
       if (file_info == NULL)
         break;
index eb9b94f57f1424ff6798ceee1df232b74f2c3070..4ff2fedac9c1a26d07d50cfdae7359b5a799127b 100644 (file)
@@ -493,3 +493,55 @@ ot_util_ensure_directory_and_fsync (GFile         *dir,
  out:
   return ret;
 }
+
+#if !GLIB_CHECK_VERSION(2, 44, 0)
+
+gboolean
+ot_file_enumerator_iterate (GFileEnumerator  *direnum,
+                            GFileInfo       **out_info,
+                            GFile           **out_child,
+                            GCancellable     *cancellable,
+                            GError          **error)
+{
+  gboolean ret = FALSE;
+  GError *temp_error = NULL;
+
+  static GQuark cached_info_quark;
+  static GQuark cached_child_quark;
+  static gsize quarks_initialized;
+
+  g_return_val_if_fail (direnum != NULL, FALSE);
+  g_return_val_if_fail (out_info != NULL, FALSE);
+
+  if (g_once_init_enter (&quarks_initialized))
+    {
+      cached_info_quark = g_quark_from_static_string ("ot-cached-info");
+      cached_child_quark = g_quark_from_static_string ("ot-cached-child");
+      g_once_init_leave (&quarks_initialized, 1);
+    }
+
+  *out_info = g_file_enumerator_next_file (direnum, cancellable, &temp_error);
+  if (out_child)
+    *out_child = NULL;
+  if (temp_error != NULL)
+    {
+      g_propagate_error (error, temp_error);
+      goto out;
+    }
+  else if (*out_info != NULL)
+    {
+      g_object_set_qdata_full ((GObject*)direnum, cached_info_quark, *out_info, (GDestroyNotify)g_object_unref);
+      if (out_child != NULL)
+        {
+          const char *name = g_file_info_get_name (*out_info);
+          *out_child = g_file_get_child (g_file_enumerator_get_container (direnum), name);
+          g_object_set_qdata_full ((GObject*)direnum, cached_child_quark, *out_child, (GDestroyNotify)g_object_unref);
+        }
+    }
+
+  ret = TRUE;
+ out:
+  return ret;
+}
+
+#endif
index 355073af60c41f40a6eb84416a9cf843d2eeb07d..030acac65f480d1f965039edbed4e185d09e3c2d 100644 (file)
@@ -93,4 +93,26 @@ gboolean ot_util_fsync_directory (GFile         *dir,
                                   GCancellable  *cancellable,
                                   GError       **error);
 
+#if !GLIB_CHECK_VERSION(2, 44, 0)
+gboolean
+ot_file_enumerator_iterate (GFileEnumerator  *direnum,
+                            GFileInfo       **out_info,
+                            GFile           **out_child,
+                            GCancellable     *cancellable,
+                            GError          **error);
+#else
+static inline gboolean
+ot_file_enumerator_iterate (GFileEnumerator  *direnum,
+                            GFileInfo       **out_info,
+                            GFile           **out_child,
+                            GCancellable     *cancellable,
+                            GError          **error)
+{
+  G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
+  return (g_file_enumerator_iterate) (direnum, out_info, out_child, cancellable, error);
+  G_GNUC_END_IGNORE_DEPRECATIONS;
+}
+#endif
+#define g_file_enumerator_iterate ot_file_enumerator_iterate
+
 G_END_DECLS
index 776ab54f07041aaaa6ac2dc864783b6e2352b53e..692a2623a8b9cb4481e82a3bccfa79786f34fd30 100644 (file)
@@ -114,8 +114,8 @@ relabel_recursively (OstreeSePolicy *sepolicy,
       GFile *child;
       GFileType ftype;
 
-      if (!gs_file_enumerator_iterate (direnum, &file_info, &child,
-                                       cancellable, error))
+      if (!g_file_enumerator_iterate (direnum, &file_info, &child,
+                                      cancellable, error))
         goto out;
       if (file_info == NULL)
         break;